package com.tony.spring.mode.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * demo-service来进行代理
 * @author qiu
 *
 */
public class DemoServiceProxy implements InvocationHandler{

	// 目标类
	private DemoService demoService;
	
	public DemoServiceProxy(DemoService demoService){
		this.demoService = demoService;
	}
	
	/**
	 * get代理对象
	 * @param demoService
	 * @return
	 */
	public Object getProxy(){
		
		return Proxy.newProxyInstance(DemoService.class.getClassLoader(), new Class[]{DemoService.class}, this);
	}
	
	/**
	 * 主要用来代理执行多个方法而言的
	 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		
		// 1、记录开始日志
		System.out.println("方法执行前打印日志");
		
		// 2、开始执行方法
		Object object = null; 
		try {
			object = method.invoke(demoService, args);
			// 3、记录结束日志
			System.out.println("方法执行后打印日志");
		} catch (Exception e) {
			System.out.println("异常打印日志");
		}
		
		return object;
	}

}
